]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
keyboardManager: Preserve current keymap across reloads
authorCarlos Garnacho <carlosg@gnome.org>
Sun, 29 Apr 2018 14:28:04 +0000 (16:28 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Sun, 29 Apr 2018 15:46:31 +0000 (17:46 +0200)
The IM can pretty much update the input sources anytime (even if
to set the same ones). That ends up triggering rebuilding all user
defined keymaps, and losing modifier state if we are unfortunate
enough that this caught us while pressing one.

One common situation seems to be password entries, resulting in
the wrong character being printed if the first character happens
to require the shift key.

If the current keymap is not found in the newly loaded list,
this._current will end up null, with the same behavior as we get
currently (immediate keymap reload).

https://bugzilla.redhat.com/show_bug.cgi?id=1569211

https://gitlab.gnome.org/GNOME/gnome-shell/issues/240

Closes: #240
js/misc/keyboardManager.js

index b8984fe9813568902255ac8fa0bb4858f2db2f05..3f0bad282ec82de4800db1d332dcc9a630f057dd 100644 (file)
@@ -89,6 +89,7 @@ var KeyboardManager = new Lang.Class({
     },
 
     setUserLayouts(ids) {
+        let currentId = this._current ? this._current.id : null;
         this._current = null;
         this._layoutInfos = {};
 
@@ -115,6 +116,9 @@ var KeyboardManager = new Lang.Class({
             info.group = group;
             info.groupIndex = groupIndex;
 
+            if (id == currentId)
+                this._current = info;
+
             i += 1;
         }
     },